class code2 {
    //螺旋矩阵：标记+右转90’
    private static int[][] dirs = {{0,1},{1,0},{0,-1},{-1,0}};//右下左上

    public List<Integer> spiralOrder(int[][] matrix) {
        int m = matrix.length;
        int n = matrix[0].length;

        List<Integer> ans = new ArrayList<>();
        int i = 0;
        int j = 0;
        int di = 0;//当前方向
        for(int k=0;k < m*n;k++) {
            ans.add(matrix[i][j]);
            matrix[i][j] = Integer.MAX_VALUE;//标记
            //下一个下标
            int x = i + dirs[di][0];
            int y = j + dirs[di][1];
            //（x,y）越界 
            if(x<0 || x>=m || y<0 || y>=n || matrix[x][y] == Integer.MAX_VALUE) {
                di = (di + 1) % 4;//右转90’
            }
            i += dirs[di][0];
            j += dirs[di][1];
        }
        return ans;
    }
}